package com.xhs.common.util.json;

import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.xhs.common.api.XhsConsts;
import com.xhs.common.error.XhsError;

import java.lang.reflect.Type;

public class XhsErrorAdapter implements JsonDeserializer<XhsError> {

  @Override
  public XhsError deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
    throws JsonParseException {
    XhsError.XhsErrorBuilder errorBuilder = XhsError.builder();
    JsonObject wxErrorJsonObject = json.getAsJsonObject();

    if (wxErrorJsonObject.get(XhsConsts.ERR_CODE) != null && !wxErrorJsonObject.get(XhsConsts.ERR_CODE).isJsonNull()) {
      errorBuilder.code(GsonHelper.getAsPrimitiveInt(wxErrorJsonObject.get(XhsConsts.ERR_CODE)));
    }
    if (wxErrorJsonObject.get("msg") != null && !wxErrorJsonObject.get("msg").isJsonNull()) {
      errorBuilder.msg(GsonHelper.getAsString(wxErrorJsonObject.get("msg")));
    }
    if (wxErrorJsonObject.get("success") != null && !wxErrorJsonObject.get("success").isJsonNull()) {
      errorBuilder.success(GsonHelper.getAsBoolean(wxErrorJsonObject.get("success")));
    }
    if (wxErrorJsonObject.get("data") != null && !wxErrorJsonObject.get("data").isJsonNull()) {
      errorBuilder.data(wxErrorJsonObject.get("data").toString());
    }

    errorBuilder.json(json.toString());

    return errorBuilder.build();
  }

}
